﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using GS1.Negocio;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using GS1.Entidad;
using System.Diagnostics;
using log4net;
using System.Configuration;
using GS1.Utilitario;
// Reference the API
using ThingMagic;

namespace MantenimientoEtiquetasRFID.Formularios
{
    public partial class frmModificar : Form
    {
        private static readonly ILog log = LogManager.GetLogger(typeof(frmModificar));
        

        #region --- Variables y Propiedades ---
        private const string TITULO = "CONFIRMACIÓN";
        private  RFIDState estadoReader;
        private enum RFIDState
        {
            CONECTADO,
            DESCONECTADO
        }

        Uri objUri;
        Reader reader;

        private Etiqueta etiqueta = null;
        
        #endregion

        #region --- Constructor ---
        public frmModificar()
        {
            InitializeComponent();
        }
        #endregion
        
        #region --- Eventos del Reader ---  
        private Reader Conectar()
        {
            Reader rReaderUSB = Reader.Create(ConfigurationManager.AppSettings[Constantes.URILECTOR].desEncriptarDES(ConfigurationManager.AppSettings[Constantes.LLAVE_3DS]).ToString());

            rReaderUSB.Connect();

            if (this.estadoReader == RFIDState.DESCONECTADO)
            {
                CambiarEstadoReader();
            }

            if (Reader.Region.UNSPEC == (Reader.Region)rReaderUSB.ParamGet("/reader/region/id"))
            {
                Reader.Region[] supportedRegions = (Reader.Region[])rReaderUSB.ParamGet("/reader/region/supportedRegions");
                if (supportedRegions.Length < 1)
                {
                    throw new FAULT_INVALID_REGION_Exception();
                }
                else
                {
                    rReaderUSB.ParamSet("/reader/region/id", supportedRegions[0]);

                }
            }
            rReaderUSB.ParamSet("/reader/radio/readPower", 1000);
            rReaderUSB.ParamSet("/reader/radio/writePower", 1500);

            return rReaderUSB;
        }

        private void grabaEpc(Etiqueta etiquetaGrabar)
        {
            try
            {
                Reader rReaderUSB = Conectar();

                Gen2.TagData epc = new Gen2.TagData(Obtienebytes(etiquetaGrabar));

                Gen2.WriteTag tagop = new Gen2.WriteTag(epc);

                rReaderUSB.ExecuteTagOp(tagop, null);
                rReaderUSB.Destroy();

            }
            catch (ReaderException ex)
            {
                Libreria.MensajeError(ex);
            }
        }

        private void bloquearAcceso()
        {
            try
            {

                Reader rReaderUSB = Conectar();

                TagReadData[] tagReads;
                Gen2.Session newSession = Gen2.Session.S0;

                rReaderUSB.ParamSet("/reader/gen2/session", newSession);
                uint uPswd = uint.Parse(ConfigurationManager.AppSettings[Constantes.ACCE_PASS].desEncriptarDES(ConfigurationManager.AppSettings[Constantes.LLAVE_3DS]).ToString(), System.Globalization.NumberStyles.HexNumber);
                Gen2.Password pswd = new Gen2.Password(uPswd);
                rReaderUSB.ParamSet("/reader/gen2/accessPassword", pswd);

                try
                {
                    // Find a tag to work on
                    tagReads = rReaderUSB.Read(Convert.ToInt32(ConfigurationManager.AppSettings[Constantes.TIMEOUTREADER]));


                    TagData tagData = tagReads[0].Tag;

                    // Lock the tag
                    rReaderUSB.ExecuteTagOp(new Gen2.Lock(uPswd, new Gen2.LockAction(Gen2.LockAction.EPC_LOCK)), tagData);
                    rReaderUSB.ExecuteTagOp(new Gen2.Lock(uPswd, new Gen2.LockAction(Gen2.LockAction.ACCESS_LOCK)), tagData);

                    rReaderUSB.Destroy();

                }

                catch (ReaderException ex)
                {
                    Libreria.MensajeError(ex);
                }

            }
            catch (ReaderException ex)
            {
                Libreria.MensajeError(ex);
            }
        }

        private void desBloquearAcceso()
        {
            try
            {

                Reader rReaderUSB = Conectar();

                TagReadData[] tagReads;
                Gen2.Session newSession = Gen2.Session.S0;

                rReaderUSB.ParamSet("/reader/gen2/session", newSession);
                uint uPswd = uint.Parse(ConfigurationManager.AppSettings[Constantes.ACCE_PASS].desEncriptarDES(ConfigurationManager.AppSettings[Constantes.LLAVE_3DS]).ToString(), System.Globalization.NumberStyles.HexNumber);
                Gen2.Password pswd = new Gen2.Password(uPswd);
                rReaderUSB.ParamSet("/reader/gen2/accessPassword", pswd);

                try
                {
                    // Find a tag to work on
                    tagReads = rReaderUSB.Read(Convert.ToInt32(ConfigurationManager.AppSettings[Constantes.TIMEOUTREADER]));

                    TagData tagData = tagReads[0].Tag;

                    // Lock the tag
                    rReaderUSB.ExecuteTagOp(new Gen2.Lock(uPswd, new Gen2.LockAction(Gen2.LockAction.ACCESS_UNLOCK)), tagData);
                    rReaderUSB.ExecuteTagOp(new Gen2.Lock(uPswd, new Gen2.LockAction(Gen2.LockAction.EPC_UNLOCK)), tagData);

                    rReaderUSB.Destroy();
                }

                catch (ReaderException ex)
                {
                    Libreria.MensajeError(ex);
                }

            }
            catch (ReaderException ex)
            {
                Libreria.MensajeError(ex);
            }
        }

        #endregion 

        #region --- Eventos Formulario ---
     
        private void frmModificar_Load(object sender, EventArgs e)
        {
            cargarFormulario();
        }

        private void frmModificar_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (this.estadoReader == RFIDState.CONECTADO) { CambiarEstadoReader(); }
        }

        private void btnLeer_Click(object sender, EventArgs e)
        {
            leerEtiqueta();
        }
        private void btnAceptar_Click(object sender, EventArgs e)
        {
            grabarEpc();
        }
        private void tbtnSalir_Click(object sender, EventArgs e)
        {
            salir();
        }      
        #endregion

        #region --- Metodos Propios ---

        private void cargarFormulario()
        {
            try
            {
                this.estadoReader = RFIDState.DESCONECTADO;
                //Obteniendo datos de terminal/usuario/bd Actual
                this.lblFechaMod.Text = Convert.ToString(DateTime.Now.Date);
                this.lblTerminalMod.Text = ConfigurationManager.AppSettings[Constantes.NOMBRE_COMPUTADORA].desEncriptarDES(ConfigurationManager.AppSettings[Constantes.LLAVE_3DS]).ToString();
                this.lblPerfilMod.Text = ConfigurationManager.AppSettings[Constantes.BD_CONEXION].desEncriptarDES(ConfigurationManager.AppSettings[Constantes.LLAVE_3DS]).ToString() + "-" + ConfigurationManager.AppSettings[Constantes.PERFIL_USUARIO].desEncriptarDES(ConfigurationManager.AppSettings[Constantes.LLAVE_3DS]).ToString() + "-" + ConfigurationManager.AppSettings[Constantes.CODIGO_USUARIO].desEncriptarDES(ConfigurationManager.AppSettings[Constantes.LLAVE_3DS]).ToString();
                this.lblOficinaMod.Text = ConfigurationManager.AppSettings[Constantes.NOMBRE_EMPRESA].desEncriptarDES(ConfigurationManager.AppSettings[Constantes.LLAVE_3DS]).ToString() + "-" + ConfigurationManager.AppSettings[Constantes.NOMBRE_OFICINA].desEncriptarDES(ConfigurationManager.AppSettings[Constantes.LLAVE_3DS]).ToString();
                this.cbIndicadorEdit.Items.Add(Constantes.ESTADO_DESCRIPCION_ACTIVO);
                this.cbIndicadorEdit.Items.Add(Constantes.ESTADO_DESCRIPCION_INACTIVO);
            }
            catch (Exception ex)
            {
                log.Error(ex.Message, ex);
                Libreria.MensajeError(ex, this.Text);
            }
        }

        private void CambiarEstadoReader()
        {
            if (this.estadoReader == RFIDState.DESCONECTADO)
                this.estadoReader = RFIDState.CONECTADO;
            else
                this.estadoReader = RFIDState.DESCONECTADO;
        }

        private String generarEpc()
        {
            String epc = ConfigurationManager.AppSettings[Constantes.IDENTIFICADOR_CAB_ETIQUETA].desEncriptarDES(ConfigurationManager.AppSettings[Constantes.LLAVE_3DS]).ToString();

            string nvehiculo = this.txtVehiculo.Text;

            for (int i = 0; i < nvehiculo.Length; i++)
            {
                switch (nvehiculo.Substring(i, 1))
                {
                    case Constantes.ASCII_MANTENIMIENTO_ETIQUETA_GUION_DES:
                        {
                            epc = epc + Constantes.ASCII_MANTENIMIENTO_ETIQUETA_GUION_HEXA;
                            break;
                        }

                    case Constantes.ASCII_MANTENIMIENTO_ETIQUETA_PUNTO_DES:
                        {
                            epc = epc + Constantes.ASCII_MANTENIMIENTO_ETIQUETA_PUNTO_HEXA;
                            break;
                        }
                    case Constantes.ASCII_MANTENIMIENTO_ETIQUETA_A_DES:
                        {
                            epc = epc + Constantes.ASCII_MANTENIMIENTO_ETIQUETA_A_HEXA;
                            break;
                        }
                    case Constantes.ASCII_MANTENIMIENTO_ETIQUETA_B_DES:
                        {
                            epc = epc + Constantes.ASCII_MANTENIMIENTO_ETIQUETA_B_HEXA;
                            break;
                        }
                    case Constantes.ASCII_MANTENIMIENTO_ETIQUETA_C_DES:
                        {
                            epc = epc + Constantes.ASCII_MANTENIMIENTO_ETIQUETA_C_HEXA;
                            break;
                        }
                    case Constantes.ASCII_MANTENIMIENTO_ETIQUETA_D_DES:
                        {
                            epc = epc + Constantes.ASCII_MANTENIMIENTO_ETIQUETA_D_HEXA;
                            break;
                        }
                    case Constantes.ASCII_MANTENIMIENTO_ETIQUETA_E_DES:
                        {
                            epc = epc + Constantes.ASCII_MANTENIMIENTO_ETIQUETA_E_HEXA;
                            break;
                        }
                    case Constantes.ASCII_MANTENIMIENTO_ETIQUETA_F_DES:
                        {
                            epc = epc + Constantes.ASCII_MANTENIMIENTO_ETIQUETA_F_HEXA;
                            break;
                        }
                    case Constantes.ASCII_MANTENIMIENTO_ETIQUETA_G_DES:
                        {
                            epc = epc + Constantes.ASCII_MANTENIMIENTO_ETIQUETA_G_HEXA;
                            break;
                        }
                    case Constantes.ASCII_MANTENIMIENTO_ETIQUETA_H_DES:
                        {
                            epc = epc + Constantes.ASCII_MANTENIMIENTO_ETIQUETA_H_HEXA;
                            break;
                        }
                    case Constantes.ASCII_MANTENIMIENTO_ETIQUETA_I_DES:
                        {
                            epc = epc + Constantes.ASCII_MANTENIMIENTO_ETIQUETA_I_HEXA;
                            break;
                        }
                    case Constantes.ASCII_MANTENIMIENTO_ETIQUETA_J_DES:
                        {
                            epc = epc + Constantes.ASCII_MANTENIMIENTO_ETIQUETA_J_HEXA;
                            break;
                        }
                    case Constantes.ASCII_MANTENIMIENTO_ETIQUETA_K_DES:
                        {
                            epc = epc + Constantes.ASCII_MANTENIMIENTO_ETIQUETA_K_HEXA;
                            break;
                        }
                    case Constantes.ASCII_MANTENIMIENTO_ETIQUETA_L_DES:
                        {
                            epc = epc + Constantes.ASCII_MANTENIMIENTO_ETIQUETA_L_HEXA;
                            break;
                        }
                    case Constantes.ASCII_MANTENIMIENTO_ETIQUETA_M_DES:
                        {
                            epc = epc + Constantes.ASCII_MANTENIMIENTO_ETIQUETA_M_HEXA;
                            break;
                        }
                    case Constantes.ASCII_MANTENIMIENTO_ETIQUETA_N_DES:
                        {
                            epc = epc + Constantes.ASCII_MANTENIMIENTO_ETIQUETA_N_HEXA;
                            break;
                        }
                    case Constantes.ASCII_MANTENIMIENTO_ETIQUETA_O_DES:
                        {
                            epc = epc + Constantes.ASCII_MANTENIMIENTO_ETIQUETA_O_HEXA;
                            break;
                        }
                    case Constantes.ASCII_MANTENIMIENTO_ETIQUETA_P_DES:
                        {
                            epc = epc + Constantes.ASCII_MANTENIMIENTO_ETIQUETA_P_HEXA;
                            break;
                        }
                    case Constantes.ASCII_MANTENIMIENTO_ETIQUETA_Q_DES:
                        {
                            epc = epc + Constantes.ASCII_MANTENIMIENTO_ETIQUETA_Q_HEXA;
                            break;
                        }
                    case Constantes.ASCII_MANTENIMIENTO_ETIQUETA_R_DES:
                        {
                            epc = epc + Constantes.ASCII_MANTENIMIENTO_ETIQUETA_R_HEXA;
                            break;
                        }
                    case Constantes.ASCII_MANTENIMIENTO_ETIQUETA_S_DES:
                        {
                            epc = epc + Constantes.ASCII_MANTENIMIENTO_ETIQUETA_S_HEXA;
                            break;
                        }
                    case Constantes.ASCII_MANTENIMIENTO_ETIQUETA_T_DES:
                        {
                            epc = epc + Constantes.ASCII_MANTENIMIENTO_ETIQUETA_T_HEXA;
                            break;
                        }
                    case Constantes.ASCII_MANTENIMIENTO_ETIQUETA_U_DES:
                        {
                            epc = epc + Constantes.ASCII_MANTENIMIENTO_ETIQUETA_U_HEXA;
                            break;
                        }
                    case Constantes.ASCII_MANTENIMIENTO_ETIQUETA_V_DES:
                        {
                            epc = epc + Constantes.ASCII_MANTENIMIENTO_ETIQUETA_V_HEXA;
                            break;
                        }
                    case Constantes.ASCII_MANTENIMIENTO_ETIQUETA_W_DES:
                        {
                            epc = epc + Constantes.ASCII_MANTENIMIENTO_ETIQUETA_W_HEXA;
                            break;
                        }
                    case Constantes.ASCII_MANTENIMIENTO_ETIQUETA_X_DES:
                        {
                            epc = epc + Constantes.ASCII_MANTENIMIENTO_ETIQUETA_X_HEXA;
                            break;
                        }
                    case Constantes.ASCII_MANTENIMIENTO_ETIQUETA_Y_DES:
                        {
                            epc = epc + Constantes.ASCII_MANTENIMIENTO_ETIQUETA_Y_HEXA;
                            break;
                        }
                    case Constantes.ASCII_MANTENIMIENTO_ETIQUETA_Z_DES:
                        {
                            epc = epc + Constantes.ASCII_MANTENIMIENTO_ETIQUETA_Z_HEXA;
                            break;
                        }
                    case Constantes.ASCII_MANTENIMIENTO_ETIQUETA_0_DES:
                        {
                            epc = epc + Constantes.ASCII_MANTENIMIENTO_ETIQUETA_0_HEXA;
                            break;
                        }
                    case Constantes.ASCII_MANTENIMIENTO_ETIQUETA_1_DES:
                        {
                            epc = epc + Constantes.ASCII_MANTENIMIENTO_ETIQUETA_1_HEXA;
                            break;
                        }
                    case Constantes.ASCII_MANTENIMIENTO_ETIQUETA_2_DES:
                        {
                            epc = epc + Constantes.ASCII_MANTENIMIENTO_ETIQUETA_2_HEXA;
                            break;
                        }
                    case Constantes.ASCII_MANTENIMIENTO_ETIQUETA_3_DES:
                        {
                            epc = epc + Constantes.ASCII_MANTENIMIENTO_ETIQUETA_3_HEXA;
                            break;
                        }
                    case Constantes.ASCII_MANTENIMIENTO_ETIQUETA_4_DES:
                        {
                            epc = epc + Constantes.ASCII_MANTENIMIENTO_ETIQUETA_4_HEXA;
                            break;
                        }
                    case Constantes.ASCII_MANTENIMIENTO_ETIQUETA_5_DES:
                        {
                            epc = epc + Constantes.ASCII_MANTENIMIENTO_ETIQUETA_5_HEXA;
                            break;
                        }
                    case Constantes.ASCII_MANTENIMIENTO_ETIQUETA_6_DES:
                        {
                            epc = epc + Constantes.ASCII_MANTENIMIENTO_ETIQUETA_6_HEXA;
                            break;
                        }
                    case Constantes.ASCII_MANTENIMIENTO_ETIQUETA_7_DES:
                        {
                            epc = epc + Constantes.ASCII_MANTENIMIENTO_ETIQUETA_7_HEXA;
                            break;
                        }
                    case Constantes.ASCII_MANTENIMIENTO_ETIQUETA_8_DES:
                        {
                            epc = epc + Constantes.ASCII_MANTENIMIENTO_ETIQUETA_8_HEXA;
                            break;
                        }
                    case Constantes.ASCII_MANTENIMIENTO_ETIQUETA_9_DES:
                        {
                            epc = epc + Constantes.ASCII_MANTENIMIENTO_ETIQUETA_9_HEXA;
                            break;
                        }
                }
            }
            return epc;
        }

        private Etiqueta ObtenerEtiquetaReader()
        {
            Etiqueta etiqueta = new Etiqueta();
            
            Reader rReaderUSB = Conectar();
            
            // Read tags
            TagReadData[] tagReads = rReaderUSB.Read(Convert.ToInt32(ConfigurationManager.AppSettings[Constantes.TIMEOUTREADER]));
            // Print tag reads
            List<String> sEpcCaptura = new List<String>();
            foreach (TagReadData tagReadData in tagReads)
            {
                sEpcCaptura.Add(tagReadData.EpcString.ToString());
            }

            if (sEpcCaptura.Count > 0)
            {
                Boolean bVarios = true;
                String sEpcAnterior = null;
                foreach (String sEPCleido in sEpcCaptura)
                {
                    if (sEpcAnterior != null)
                        if (!sEpcAnterior.Equals(sEPCleido)) bVarios = false;

                    sEpcAnterior = sEPCleido;
                }
                if (bVarios)  etiqueta.codEpc = sEpcAnterior;
                else  etiqueta.codEpc = "000";
                
            }
            else etiqueta.codEpc = "000";
            
            return etiqueta;
        }

        private void leerEtiqueta()
        {
            //Proceso para leer EPC etiqueta
            this.etiqueta = ObtenerEtiquetaReader();

            //Obtener información de etiqueta desde la BD
            if (this.etiqueta.codEpc != "000")
            {
                this.etiqueta = obtenerEtiqueta(this.etiqueta);
               
                    //Mostrar información en pantalla
                    this.txtEPC.Text = this.etiqueta.codEpc;
                    this.txtVehiculo.Text = this.etiqueta.codVehiculo;
                    if (this.etiqueta.indActi == Convert.ToInt32(Constantes.ESTADO_CODIGO_ACTIVO))
                    {
                        this.cbIndicadorEdit.Text = Constantes.ESTADO_DESCRIPCION_ACTIVO;
                    }
                    else
                    {
                        this.cbIndicadorEdit.Text = Constantes.ESTADO_DESCRIPCION_INACTIVO; 
                    }
            }
            else
            {
                MessageBox.Show("Etiqueta vacía", "ALERTA", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
        }

        private void grabarEpc()
        {
            if (this.cbIndicadorEdit.SelectedItem.Equals(string.Empty))
            {
                Libreria.CampoNecesario(this.cbIndicadorEdit, "Debe seleccionar estado", TITULO);
                return;
            }
            if (MessageBox.Show("¿Estas seguro de grabar etiqueta?", "ALERTA", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)

                // Si el número de vehículo escrito en el texbox, es igual al número de vehículo obtenido, cambio estado == modificar
                if (this.etiqueta.codVehiculo.Equals(this.txtVehiculo.Text))
                {
                    if (modificarEtiqueta())
                    {
                        MessageBox.Show("Se cambió de estado correctamente", TITULO, MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
                //Si no son iguales, regrabar
                else
                {
                    if (this.estadoReader == RFIDState.CONECTADO)
                    {
                        Etiqueta etiquetaNueva = new Etiqueta();
                        etiquetaNueva.codEpc = generarEpc();
                        this.txtEPC.Text = etiquetaNueva.codEpc;
                        etiquetaNueva.codVehiculo = this.txtVehiculo.Text;
                        etiquetaNueva.fecCrea = DateTime.Now;
                        etiquetaNueva.indActi = Convert.ToInt32(Constantes.ESTADO_CODIGO_ACTIVO);
                        etiquetaNueva.nomCompCrea = ConfigurationManager.AppSettings[Constantes.NOMBRE_COMPUTADORA].desEncriptarDES(ConfigurationManager.AppSettings[Constantes.LLAVE_3DS]).ToString();
                        etiquetaNueva.codUsuaCrea = ConfigurationManager.AppSettings[Constantes.CODIGO_USUARIO].desEncriptarDES(ConfigurationManager.AppSettings[Constantes.LLAVE_3DS]).ToString();
                        etiquetaNueva.nomCompModi = ConfigurationManager.AppSettings[Constantes.NOMBRE_COMPUTADORA].desEncriptarDES(ConfigurationManager.AppSettings[Constantes.LLAVE_3DS]).ToString();
                        etiquetaNueva.codUsuaModi = ConfigurationManager.AppSettings[Constantes.CODIGO_USUARIO].desEncriptarDES(ConfigurationManager.AppSettings[Constantes.LLAVE_3DS]).ToString();

                        //Se confirma que el código no este registrado previamente
                        if (validaActivo(etiquetaNueva))
                        {
                            MessageBox.Show("Esta etiqueta ya está asociada a un vehículo", TITULO, MessageBoxButtons.OK, MessageBoxIcon.Information);
                            return;
                        }

                        MessageBox.Show("Coloque la etiqueta encima del lector", "CONFIRMACIÓN", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        //Primero se desbloquea
                        desBloquearAcceso();
                        MessageBox.Show("Conexión con lector confirmada", "CONFIRMACIÓN", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        //Se graba nuevo codigo
                        grabaEpc(etiquetaNueva);
                        MessageBox.Show("Proceso de grabación no retire la etiqueta", "CONFIRMACIÓN", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        //bloquea nuevamente la etiqueta
                        bloquearAcceso();

                        //Graba código EPC-Vehículo en Base de Datos
                        if (guardarEpc(etiquetaNueva))
                        {
                            MessageBox.Show("Proceso terminado", TITULO, MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
                        else
                        {
                            //Se detuvo la grabación por problemas en BD
                            MessageBox.Show("No se registro etiqueta", TITULO, MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                    }
                }
        }
        
        private bool modificarEtiqueta()
        {
        
            bool respuesta = false;
            try
            {
                //Convert.ToString(ConfigurationManager.AppSettings[Constantes.NOMBRE_COMPUTADORA].desEncriptarDES(ConfigurationManager.AppSettings[Constantes.LLAVE_3DS]).ToString());
                this.etiqueta.nomCompModi = ConfigurationManager.AppSettings[Constantes.NOMBRE_COMPUTADORA].desEncriptarDES(ConfigurationManager.AppSettings[Constantes.LLAVE_3DS]).ToString();
                this.etiqueta.codUsuaModi = ConfigurationManager.AppSettings[Constantes.CODIGO_USUARIO].desEncriptarDES(ConfigurationManager.AppSettings[Constantes.LLAVE_3DS]).ToString();
                this.etiqueta.fecModi = DateTime.Now;

                respuesta = new EtiquetaBL().modificarEtiqueta(this.etiqueta);
            }
            catch (Exception ex)
            {
                Libreria.MensajeError(ex);
            }
            return respuesta;
        }

        

        private void salir()
        {
            this.Close();
        }
        #endregion

        #region --Metodos BaseDatos --
        
        private Etiqueta obtenerEtiqueta(Etiqueta etiquetaleida)
        {

            try
            {
                this.etiqueta = new EtiquetaBL().obtenerEtiqueta(this.etiqueta);
            }

            catch (Exception ex)
            {
                Libreria.MensajeError(ex);
            }

            return this.etiqueta;
        }

        private bool validaActivo(Etiqueta etiquetaValida)
        {
            int iContar = 0;
            try
            {

                iContar = new EtiquetaBL().contarEtiqueta(etiquetaValida);
            }

            catch (Exception ex)
            {
                Libreria.MensajeError(ex);
            }

            return iContar > 0;
        }

        private bool guardarEpc(Etiqueta etiqueta)
        {
            bool respuesta = false;
            try
            {

                respuesta = new EtiquetaBL().registrarEtiqueta(etiqueta);
            }
            catch (Exception ex)
            {
                Libreria.MensajeError(ex);
            }
            return respuesta;
        }
        #endregion

        #region --- Metodos Soporte ---
        private ushort[] Obtieneushort(string str)
        {
            ushort[] datos = CadenaUshort(str);
            return datos;
        }

        public static ushort[] CadenaUshort(string hex)
        {
            int prelen = 0;

            if (hex.StartsWith("0x") || hex.StartsWith("0X"))
                prelen = 4;

            ushort[] ushorts = new ushort[(hex.Length - prelen) / 4];

            for (int i = 0; i < ushorts.Length; i++)
            {
                string ushortstring = hex.Substring(prelen + (4 * i), 4);
                ushorts[i] = ushort.Parse(ushortstring, System.Globalization.NumberStyles.HexNumber);
            }

            return ushorts;
        }


        private byte[] Obtienebytes(Etiqueta etiquetaGrabar)
        {

            byte[] bytes = ByteFormat.FromHex(etiquetaGrabar.codEpc);
            return bytes;
        }
        #endregion
    }
   
}
